1
ประสิทธิภาพและความสามารถในการแสดงออกของซีพลัสสมัยใหม่
AI013Lesson 3
00:00

ซีพลัสสมัยใหม่ (ซีพลัส11/14/17) ได้นำเสนอ การสร้างโครงสร้างแบบไม่มีต้นทุน ที่ช่วยลดช่องว่างระหว่างการควบคุมฮาร์ดแวร์ระดับต่ำกับความสามารถในการอ่านเข้าใจได้ง่าย ความมีประสิทธิภาพถูกบรรลุผ่านการจัดการหน่วยความจำอย่างแน่นอน ในขณะที่ความสามารถในการแสดงออกถูกเพิ่มเติมผ่านตรรกะในขั้นตอนการคอมไพล์

1. การจัดวางหน่วยความจำ: คอนเทนเนอร์ std::array เทียบกับ std::vector

std::array เป็นตัวห่อสำหรับอาร์เรย์แบบซีที่ทันสมัย ถูกจัดสรรบน สแต็ก พร้อมขนาดคงที่ที่ทราบตั้งแต่ขั้นตอนการคอมไพล์ ในทางกลับกัน, std::vector อยู่บน ฮีพ และขยายขนาดได้ตามต้องการ แม้ว่า std::vector จะใช้ปัจจัยการเติบโตแบบเรขาคณิต (บ่อยครั้งคือ $1.5\times$ หรือ $2\times$) ซีพลัสสมัยใหม่ให้บริการ shrink_to_fit() เพื่อขอคืนพื้นที่ที่ไม่ได้ใช้งาน ซึ่งมอบการควบคุมที่เข้มงวดกว่าภาษาที่จัดการโดยอัตโนมัติอย่างกังโกล

2. SFINAE และความปลอดภัยของประเภทข้อมูล

ผ่าน std::enable_if และ std::is_enumนักพัฒนาสามารถนำเสนอมากกว่า การแทนที่ที่ล้มเหลวไม่ใช่ข้อผิดพลาด (SFINAE)ซึ่งทำให้คอมไพเลอร์สามารถเลือกโอเวอร์โหลดฟังก์ชันเฉพาะได้ตามลักษณะของประเภทในขั้นตอนการคอมไพล์ เช่น การสร้างตัวดำเนินการสตรีมแบบทั่วไปสำหรับเอนัม โดยใช้ std::underlying_type.

// ไฮไลท์การจัดการหน่วยความจำในซีพลัส11
v.push_back(std::move(obj)); // หลักการย้ายทรัพยากร
arr.at(0); // ตรวจสอบขอบเขต
main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>